﻿using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Infrastructure;

namespace Tszy.Unlimited.Data.EntityFramework;

/// <summary>
/// EF 数据库上下文接口。
/// </summary>
public interface IEntityFrameworkContext
{
    /// <summary>
    /// 唯一标识。
    /// </summary>
    Guid UniqueId { get; }

    /// <summary>
    /// 数据库访问。
    /// </summary>
    DatabaseFacade Database { get; }

    /// <summary>
    /// 创建一个 DbSet 用于查询与保存实体。
    /// </summary>
    /// <typeparam name="TEntity">实体类型。</typeparam>
    /// <returns>DbSet 对象。</returns>
    DbSet<TEntity> Set<TEntity>() where TEntity : class;

    /// <summary>
    /// 保存所有修改。
    /// </summary>
    /// <returns></returns>
    int SaveChanges();

    /// <summary>
    /// 保存所有修改。
    /// </summary>
    /// <param name="cancellationToken"></param>
    /// <returns></returns>
    Task<int> SaveChangesAsync(CancellationToken cancellationToken = default);
}
